/*===========================================================================*/
/*					COPYRIGHT												 */
/*===========================================================================*/
/* Copyright (c) 2012 by iSoft Infrastructure software Co.,LTD.              */
/*																			 */
/* All rights are reserved. Reproduction in whole or in part is				 */
/* prohibited without the prior written consent of the copyright			 */
/* owner. The information presented in this document does not				 */
/* form part of any quotation or contract, is believed to be				 */
/* accurate and reliable and may be changed without notice.					 */
/* No liability will be accepted by the publisher for any					 */
/* consequence of its use. Publication thereof does not convey				 */
/* nor imply any license under patent- or other industrial or				 */
/* intellectual property rights.											 */
/*																			 */
/* @file       <MemIf.h>														 */
/*																			 */
/* @brief      <Memory Abstraction Interface Module source file>			 */
/*																			 */
/*	<Compiler: TriCore v3.5r1    MCU:TC1782>								 */
/*																			 */
/*	@author     <qiong.wang>												 */
/*	@date       <12-11-2014>													 */
/*===========================================================================*/

/*=======[R E V I S I O N   H I S T O R Y]====================================*/
/*  <VERSION>    <DATE>      <AUTHOR>        <REVISION LOG>
 *  V1.0.0      20141112     qiong.wang      Initial version
 */
/*============================================================================*/
#ifndef MEMIF_H_
#define MEMIF_H_

/*==========================================================================*/
/*		I N C L U D E S                                                      								  */
/*==========================================================================*/
#include "MemIf_Cfg.h"
#include "Std_Types.h"

/*==========================================================================*/
/*         G L O B A L   M A C R O   D E F I N I T I O N S                     							  */
/*==========================================================================*/

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_SetModePtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define setmode function ptr.  	
*/
typedef void(*MemIf_SetModePtr)(MemIf_ModeType);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_ReadPtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define memory read function ptr.  	
*/
typedef Std_ReturnType(*MemIf_ReadPtr)(uint16, uint16, uint8*, uint16);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_WritePtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define memory write function ptr.  	
*/
typedef Std_ReturnType(*MemIf_WritePtr)(uint16, uint8*);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_CancelPtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define job cancel function ptr.
*/
typedef void(*MemIf_CancelPtr)(void);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_GetStatusPtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define job getstatus function ptr.
*/
typedef MemIf_StatusType(*MemIf_GetStatusPtr)(void);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_GetJobResultPtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define memory abstraction GetJobResult function ptr.
*/
typedef MemIf_JobResultType(*MemIf_GetJobResultPtr)(void);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_InvalidateBlockPtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define memory abstraction InvalidateBlock function ptr.
*/
typedef Std_ReturnType(*MemIf_InvalidateBlockPtr)(uint16);

/*==========================================================================*/
/*
	ITEM NAME:		<MemIf_EraseImmediateBlockPtr>
	SCOPE:			<MemIf Module>
	DESCRIPTION:
		define memory abstraction EraseImmediateBlock function ptr.
*/
typedef Std_ReturnType (*MemIf_EraseImmediateBlockPtr)(uint16);


/*@req <MEMIF030>
*/
/*==========================================================================*/
/*
	ITEM NAME:		<Development Error Macro>
	SCOPE:			<MEMIF Module>
	DESCRIPTION:
		Development Error Macro Collection
*/
/*API parameter checking*/

/*@req <MEMIF006>
*/
#define MEMIF_E_PARAM_DEVICE			0x01

/*==========================================================================*/
/*
	ITEM NAME:		<MEMIF Module Service ID Macro>
	SCOPE:			<MEMIF Module>
	DESCRIPTION:
		MEMIF Module Service ID Macro Collection
*/
#define MEMIF_SETMODE_ID          		0x01
#define MEMIF_READ_ID             		0x02
#define MEMIF_WRITE_ID            		0x03
#define MEMIF_CANCEL_ID					0x04
#define MEMIF_GETSTATUS_ID        		0x05
#define MEMIF_GETJOBRESULT_ID			0x06
#define MEMIF_INVALIDATEBLOCK_ID		0x07
#define MEMIF_GETVERSIONINFO_ID			0x08
#define MEMIF_ERASEIMMEDIATEBLOCK_ID	0x09

/*==========================================================================*/
/*
	ITEM NAME:		<MEMIF Module version info Macro>
	SCOPE:			<MEMIF Module>
	DESCRIPTION:
		MEMIF Module Version ID
*/
#define MEMIF_VENDOR_ID			62
#define MEMIF_INSTANCE_ID		0
#define MEMIF_SW_MAJOR_VERSION	1
#define MEMIF_SW_MINOR_VERSION	0
#define MEMIF_SW_PATCH_VERSION	0

#define MEMIF_MODULE_ID		22
/*==========================================================================*/
/*      G L O B A L   F U N C T I O N   P R O T O T Y P E S                 							  */
/*==========================================================================*/
void MemIf_SetMode(MemIf_ModeType Mode);
Std_ReturnType MemIf_Read( 
	uint8 DeviceIndex, 
	uint16 BlockNumber, 
	uint16 BlockOffset, 
	uint8* DataBufferPtr, 
	uint16 Length  
);
Std_ReturnType MemIf_Write(uint8 DeviceIndex, uint16 BlockNumber, uint8* DataBufferPtr);
void MemIf_Cancel(uint8 DeviceIndex);
MemIf_StatusType MemIf_GetStatus(uint8 DeviceIndex);
MemIf_JobResultType MemIf_GetJobResult(uint8 DeviceIndex);
Std_ReturnType MemIf_InvalidateBlock(uint8 DeviceIndex, uint16 BlockNumber);
void MemIf_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
Std_ReturnType MemIf_EraseImmediateBlock(uint8 DeviceIndex, uint16 BlockNumber);

/*==========================================================================*/
/*      G L O B A L   D A T A   D E C L A R A T I O N S                     							  */
/*==========================================================================*/
extern const MemIf_SetModePtr MemIfSetModeFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_ReadPtr MemIfReadFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_WritePtr MemIfWriteFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_CancelPtr MemIfCancelFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_GetStatusPtr MemIfGetStatusFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_GetJobResultPtr MemIfGetJobResultFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_InvalidateBlockPtr MemIfInvalidateBlockFct[MEMIF_NUMBER_OF_DEVICES];
extern const MemIf_EraseImmediateBlockPtr MemIfEraseImmediateBlockFct[MEMIF_NUMBER_OF_DEVICES];

#endif

/*==========================================================================*/
/*		E N D   O F   F I L E															  */
/*==========================================================================*/

